package com.example.demo.mapper;

import com.example.demo.client.evt.cssmqry.role.QryRoleEvt;
import com.example.demo.client.vm.sysbasequery.RoleTreeVm;
import com.example.demo.domain.Role;
import com.example.demo.web.rest.evt.IdEvt;
import com.example.demo.web.rest.evt.RelationEvt;
import com.example.demo.web.rest.evt.ResourceRelationEvt;
import com.example.demo.web.rest.evt.UserRoleEvt;
import com.example.demo.web.rest.vm.ExportRolePermissionVm;
import com.example.demo.web.rest.vm.ExportRoleVm;
import com.example.demo.web.rest.vm.ParentRoleVm;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * 角色管理
 *
 * @Author zmf
 * @Date 2018/12/14  10:06
 */
@Mapper
public interface RoleMapper {
    /**
     * 删除角色与菜单权限关系
     * @param roleId
     * @param permissionIds
     * @return
     */
    Integer delRolePermission(@Param(value = "roleId") Long roleId,
                              @Param(value = "permissionIds") List<Long> permissionIds);

    /**
     * 添加角色与菜单权限关系
     * @param roleId
     * @param permissionIds
     * @return
     */
    Integer addRolePermission(@Param(value = "roleId") Long roleId,
                              @Param(value = "permissionIds") List<Long> permissionIds);

    /**
     * 删除用户与角色关系：一种角色删除多个用户
     * @param evt
     * @return
     */
    Integer delUsersFromRole(RelationEvt evt);

    /**
     * 删除用户与角色关系
     * @param evt
     * @return
     */
    Integer delUserRole(UserRoleEvt evt);

    /**
     * 添加角色和用户关系
     * @param evt
     * @return
     */
    Integer addUserRole(RelationEvt evt);

    /***
     * 根据角色id获取用户名信息
     * @param roleId
     */
    String  qryCreateUserByRoleId(@Param(value = "roleId") Long roleId);

    /***
     * 获取角色
     */
    List<RoleTreeVm> getRoleInfos();

    /***
     * 查询限制条件的全量角色id
     * @param evt
     */
    List<String> getFullRoleIds(QryRoleEvt evt);

    /***
     * 根据角色IDS获取角色
     * @param roleIdList
     */
    List<RoleTreeVm> getRoleByIds(@Param(value = "roleIdList") Set<String> roleIdList);

    List<ExportRoleVm> getExportRoleByIds(@Param(value = "roleIdList") Set<String> roleIdList);

    List<ParentRoleVm> getRoleByName(@Param(value = "roleName") String roleName);

    /***
     * 获取角色下拉框值
     */
    List<RoleTreeVm> getParentRoleTree(IdEvt evt);

    /**
     * 删除角色与资源权限关系
     * @param evt
     * @return
     */
    Integer delRoleResource(ResourceRelationEvt evt);

    /**
     * 增加角色与资源关系
     * @param evt
     * @return
     */
    Integer addRoleResource(ResourceRelationEvt evt);

    Integer checkExistUserRole(@Param(value = "roleId") Long roleId, @Param(value = "userId") Long userId);

    /***
     * 根据角色名查找角色
     * @param roleName
     */
    List<String> isExistRoleName(@Param(value = "roleName")String roleName,@Param(value = "regionId")String regionId);

    /**
     * 添加角色和用户关系:为一个用户赋多重角色
     * @param evt
     * @return
     */
    Integer addRolesToUser(RelationEvt evt);


    /**
     * 查询角色权限表———导出用
     * @return
     */
    List<ExportRolePermissionVm> getRolePermission();

    /***
     * 获取角色树深度
     */
    Integer getRoleTreeDeep();

    int insertRole(Role role);

    int updateRole(Role role);

    void delUserRoleAll(Long id);

    Integer queryRoleUser(Long id);

    Integer queryRoleGroup(Long id);
}
